//-----------------------------------------------------------------------
//<copyright file="LuuKhoDAO.cs
//Code generate by tools.
//</copyright>
//-----------------------------------------------------------------------

using System;
using System.Data;
using System.Data.Common;
using System.Collections.Generic;
using PMS.Exceptions;
using System.Data.SqlClient;
using PMS.Entity;

namespace PMS.DAL
{
	public class LuuKhoDAO : SQLDatabase, ILuuKhoDAO
	{

		#region Create LuuKho methods

		public LuuKho CreateLuuKho(LuuKho luuKho)
		{
			try
			{

				SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoInsert");
				AddOutParameter(command, "@MaLuuKho", SqlDbType.Int, luuKho.MaLuuKho);
				AddInParameter(command, "@MaThuoc", SqlDbType.NVarChar, luuKho.MaThuoc);
				AddInParameter(command, "@SoLo", SqlDbType.NVarChar, luuKho.SoLo);
				AddInParameter(command, "@MaKho", SqlDbType.NVarChar, luuKho.MaKho);
				AddInParameter(command, "@TongNhap", SqlDbType.Int, luuKho.TongNhap);
				AddInParameter(command, "@TongXuat", SqlDbType.Int, luuKho.TongXuat);
				AddInParameter(command, "@TonKho", SqlDbType.Int, luuKho.TonKho);
				AddInParameter(command, "@HanDung", SqlDbType.NVarChar, luuKho.HanDung);
                AddInParameter(command, "@NgaySX", SqlDbType.DateTime, luuKho.NgaySX);
                AddInParameter(command, "@HanSuDung", SqlDbType.DateTime, luuKho.HanSuDung);

				ExecuteNonQuery(command);
                luuKho.MaLuuKho = (int)GetParameterValue(command, "@MaLuuKho");
				return luuKho;
			}
			catch (Exception ex)
			{
				throw DataAccessException.GetException("Data Access CreateLuuKhoException", ex);
			}
		}

		#endregion

		#region Update LuuKho methods

		public void UpdateLuuKho(LuuKho luuKho)
		{
			try
			{
				SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoUpdate");

				AddInParameter(command, "@MaLuuKho", SqlDbType.Int, luuKho.MaLuuKho);
				AddInParameter(command, "@MaThuoc", SqlDbType.NVarChar, luuKho.MaThuoc);
				AddInParameter(command, "@SoLo", SqlDbType.NVarChar, luuKho.SoLo);
				AddInParameter(command, "@MaKho", SqlDbType.NVarChar, luuKho.MaKho);
				AddInParameter(command, "@TongNhap", SqlDbType.Int, luuKho.TongNhap);
				AddInParameter(command, "@TongXuat", SqlDbType.Int, luuKho.TongXuat);
				AddInParameter(command, "@TonKho", SqlDbType.Int, luuKho.TonKho);
				AddInParameter(command, "@HanDung", SqlDbType.NVarChar, luuKho.HanDung);
                AddInParameter(command, "@NgaySX", SqlDbType.DateTime, luuKho.NgaySX);
                AddInParameter(command, "@HanSuDung", SqlDbType.DateTime, luuKho.HanSuDung);

				ExecuteNonQuery(command);
			}
			catch (Exception ex)
			{
				throw DataAccessException.GetException("Data Access UpdateLuuKhoException", ex);
			}
		}

        public void UpdateLuuKhoStock(int maluukho, int tonkho, int tongnhap, int tongxuat)
        {
            try
            {
                SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoUpdate");

                AddInParameter(command, "@MaLuuKho", SqlDbType.Int,maluukho);
                AddInParameter(command, "@TongNhap", SqlDbType.Int, tongnhap);
                AddInParameter(command, "@TongXuat", SqlDbType.Int, tongxuat);
                AddInParameter(command, "@TonKho", SqlDbType.Int, tonkho);

                ExecuteNonQuery(command);
            }
            catch (Exception ex)
            {
                throw DataAccessException.GetException("Data Access UpdateLuuKhoException", ex);
            }
        }

		#endregion

		#region Delete LuuKho methods

		public void DeleteLuuKho(LuuKho luuKho)
		{
			try
			{
				SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoDelete");

				AddInParameter(command, "@MaLuuKho", SqlDbType.Int, luuKho.MaLuuKho);

				ExecuteNonQuery(command);
			}
			catch (Exception ex)
			{
				throw DataAccessException.GetException("Data Access DeleteLuuKhoException", ex);
			}
		}

		#endregion

		#region Select methods

		#region GetAll LuuKho methods

		public LuuKhos GetAllLuuKho(string makho, string mathuoc, string solo, int? min)
		{
			try
			{

				SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoGetList");
                AddInParameter(command, "@MaKho", SqlDbType.NVarChar, makho);
                AddInParameter(command, "@MaThuoc", SqlDbType.NVarChar, mathuoc);
                AddInParameter(command, "@SoLo", SqlDbType.NVarChar, solo);
                AddInParameter(command, "@Min", SqlDbType.Int, min);
				LuuKhos Result = new LuuKhos();
				List<LuuKho> List = ExecuteQuery<LuuKho>(command,true);
				foreach(LuuKho item in List)
				{
					Result.Add(item);
				}
				return Result;
			}
			catch (Exception ex)
			{
				throw DataAccessException.GetException("Data Access GetAllLuuKhoException", ex);
			}
		}

		#endregion


		#region GetLuuKho methods

		public LuuKho GetLuuKhoByID(int maLuuKho)
		{
			try
			{
				SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoGet");

				AddInParameter(command, "@maLuuKho", SqlDbType.Int, maLuuKho);

				return ExecuteQuery<LuuKho>(command);
			}
			catch (Exception ex)
			{
				throw DataAccessException.GetException("Data Access GetLuuKhoBy ID Exception", ex);
			}
		}

        public LuuKho GetLuuKhoByMaThuocAndSoLoAndMaKHo(string mathuoc, string solo, string makho)
        {
            try
            {
                SqlCommand command = SQLDatabase.StoredProcedureCommand("spLuuKhoGetByMaThuocAndSoLoAndMaKho");

                AddInParameter(command, "@MaThuoc", SqlDbType.NVarChar, mathuoc);
                AddInParameter(command, "@SoLo", SqlDbType.NVarChar, solo);
                AddInParameter(command, "@MaKho", SqlDbType.NVarChar, makho);

                return ExecuteQuery<LuuKho>(command);
            }
            catch (Exception ex)
            {
                throw DataAccessException.GetException("Data Access GetLuuKhoBy ID Exception", ex);
            }
        }

		#endregion


		#endregion
	}
}//End Class
